﻿using System.Collections.Generic;
using System.Linq;

using LM.InterfacesFabricas.DTOs;
using LM.InterfacesFabricas.Utilidades;
using LM.Negocio.Objetos;

namespace LM.Repositorios.Conversores
{
    public class ConversorDeItemTabelaDePreco
    {
        public ItemTabelaPreco Converta(DtoItemTabelaPreco dtoTabelaPreco)
        {
            if (dtoTabelaPreco != null)
            {
                var tabelaPreco = new ItemTabelaPreco();
                tabelaPreco.Periodo = dtoTabelaPreco.Periodo;
                tabelaPreco.CustoPeriodo = dtoTabelaPreco.CustoPeriodo;
                tabelaPreco.PeriodoAdicional = dtoTabelaPreco.PeriodoAdicional;
                tabelaPreco.CustoAdicional = dtoTabelaPreco.CustoAdicional;

                if (dtoTabelaPreco.DiasSemanaItemTabelaPrecos != null)
                {
                    tabelaPreco.DiasSemanaItemTabelaPrecos = ConvertaDiaSemanaLista(dtoTabelaPreco.DiasSemanaItemTabelaPrecos);
                }

                return tabelaPreco;
            }

            return null;
        }

        public DtoItemTabelaPreco Converta(ItemTabelaPreco tabelaPreco)
        {
            if (tabelaPreco != null)
            {
                var dtoTabelaPreco = new DtoItemTabelaPreco();
                dtoTabelaPreco.Periodo = tabelaPreco.Periodo;
                dtoTabelaPreco.CustoPeriodo = tabelaPreco.CustoPeriodo;
                dtoTabelaPreco.PeriodoAdicional = tabelaPreco.Periodo;
                dtoTabelaPreco.CustoAdicional = tabelaPreco.CustoAdicional;
                
                if (tabelaPreco.DiasSemanaItemTabelaPrecos != null)
                {
                    dtoTabelaPreco.DiasSemanaItemTabelaPrecos = ConvertaDiaSemanaLista(tabelaPreco.DiasSemanaItemTabelaPrecos);
                }

                return dtoTabelaPreco;
            }
            return null;
        }

        public IList<DtoItemTabelaPreco> ConvertaLista(IList<ItemTabelaPreco> itensTabelaPreco)
        {
            var dtoItemTabelaPrecos = new List<DtoItemTabelaPreco>();

            foreach (var item in itensTabelaPreco)
            {
                dtoItemTabelaPrecos.Add(Converta(item));
            }

            return dtoItemTabelaPrecos;
        }

        public IList<ItemTabelaPreco> ConvertaLista(IList<DtoItemTabelaPreco> itensTabelaPreco)
        {
            var dtoItemTabelaPrecos = new List<ItemTabelaPreco>();

            foreach (var item in itensTabelaPreco)
            {
                dtoItemTabelaPrecos.Add(Converta(item));
            }

            return dtoItemTabelaPrecos;
        }

        private DiaSemanaItemTabelaPreco ConvertaDiaSemana(DtoDiaSemanaItemTabelaPreco diaSemana)
        {
            if (diaSemana != null)
            {
                var dia = new DiaSemanaItemTabelaPreco();

                dia.DiaDaSemana = diaSemana.DiaDaSemana;
                dia.PeriodoDoDia = ConversorDeObjetos.Copie<PeriodoDoDia, DtoPeriodoDoDia>(diaSemana.PeriodoDoDia);

                return dia;
            }

            return null;
        }

        private DtoDiaSemanaItemTabelaPreco ConvertaDiaSemana(DiaSemanaItemTabelaPreco diaSemana)
        {
            if (diaSemana != null)
            {
                var dia = new DtoDiaSemanaItemTabelaPreco();

                dia.DiaDaSemana = diaSemana.DiaDaSemana;
                dia.PeriodoDoDia = ConversorDeObjetos.Copie<DtoPeriodoDoDia, PeriodoDoDia>(diaSemana.PeriodoDoDia);

                return dia;
            }

            return null;
        }

        private IList<DtoDiaSemanaItemTabelaPreco> ConvertaDiaSemanaLista(IList<DiaSemanaItemTabelaPreco> dias)
        {
            if (dias != null && dias.Count > 0)
            {
                var dtoDias = new List<DtoDiaSemanaItemTabelaPreco>();

                foreach (var dia in dias)
                {
                    dtoDias.Add(ConvertaDiaSemana(dia));
                }

                return dtoDias;
            }

            return null;
        } 

        private IList<DiaSemanaItemTabelaPreco> ConvertaDiaSemanaLista(IList<DtoDiaSemanaItemTabelaPreco> dias)
        {
            if (dias != null && dias.Count > 0)
            {
                var dtoDias = new List<DiaSemanaItemTabelaPreco>();

                foreach (var dia in dias)
                {
                    dtoDias.Add(ConvertaDiaSemana(dia));
                }

                return dtoDias;
            }

            return null;
        } 
    }
}
